package com.itHsuSE.experiment;

import java.io.*;
import java.util.List;

/**
 * 实验7_1：对象序列化和反序列化
 * 1. 创建三个 User 对象，存储在一个 Entity 对象中。
 * 2. 将 Entity 对象序列化到文件。
 * 3. 从文件中反序列化 Entity 对象，并输出加载的用户信息。
 *  注意：在实际应用中，文件路径和异常处理可能需要更复杂的逻辑和注释。
 *  通过该实验，我们演示了如何使用 Java 的对象序列化和反序列化功能来保存和加载对象数据。
 * @author Hsu琛君珩
 * @version 1.0
 */
public class Experiment7_1 {
    public static void main(String[] args) {
        // 步骤1: 创建三个 User 对象
        User user1 = new User("Alice", "20190001");
        User user2 = new User("Bob", "20190002");
        User user3 = new User("Coco", "20190003");

        // 步骤2: 创建一个 Entity 来存储 User 对象
        Entity<User> userEntity = new Entity<>();
        userEntity.insert(user1);
        userEntity.insert(user2);
        userEntity.insert(user3);

        // 步骤3: 将 Entity 对象序列化到文件
        String filePath = "user_data.ser";
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath))) {
            oos.writeObject(userEntity);
            System.out.println("序列化完成，文件保存在: " + filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 从文件中反序列化 Entity 对象
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath))) {
            Entity<User> loadedUserEntity = (Entity<User>) ois.readObject();
            List<User> loadedUsers = loadedUserEntity.getList();

            System.out.println("加载的用户信息:");
            for (User user : loadedUsers) {
                System.out.println(user);
            }
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
